home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 7
/
Gekikoh Dennoh Club Vol. 7 (Japan).7z
/
Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin
/
games
/
plinboot
/
plinboot.s
< prev
next >
Wrap
Text File
|
1999-06-15
|
5KB
|
232 lines
;----------------------------------------------------------------
;
; 『魔法のシュータープッチンプリン』ブートプログラム
; PLINBOOT.X v1.00 (1999.05.31) by M.Kamada
;
;----------------------------------------------------------------
;
; ・スコアを CD-ROM に書き込もうとして「書き込み不可能です」の
; 白帯が出るのを回避する。
; この白帯のときだけ無条件にアボートが選択されたものとみなす。
; (この白帯が出るのはmain()の最後なのでアボートして問題ない)
;
; ・キーボードでの操作に対応する
; ↑/8 上
; ↓/2 下
; ←/4 左
; →/6 右
; XF1/OPT.1 ボタンA(ボンバー)
; XF2/OPT.2 ボタンB(ショット)
;
; ・終了時にカーソルを表示する
;
; ・終了時にキーバッファをクリアする
;
;----------------------------------------------------------------
.include doscall.mac
.include iocscall.mac
debug .macro ch
move.l d0,-(sp)
move.w #ch,-(sp)
DOS _PUTCHAR
addq.l #2,sp
move.l (sp)+,d0
.endm
;----------------------------------------------------------------
;バージョン定義
PROGNAME reg 'PLINBOOT'
LOWER_PROGNAME reg 'plinboot'
VERSION reg '1.00'
DATE reg '1999.05.31'
;----------------------------------------------------------------
;定数
TRAP14_VECTOR equ $00B8
;----------------------------------------------------------------
;実行開始位置
.text
exec_entry:
lea.l (16,a0),a0
suba.l a0,a1
movem.l a0-a1,-(sp)
DOS _SETBLOCK
addq.l #8,sp
lea.l stack_top,sp
lea.l execparam-8,a0
subq.l #8,a2
moveq.l #8+1-1,d0
@@: move.b (a2)+,(a0)+
dbra d0,@b
movea.l a2,a1
bsr strcpy
lea.l (filename,pc),a1
lea.l execname,a0
bsr strcpy
clr.l -(sp)
pea.l execparam
pea.l execname
move.w #2,-(sp)
DOS _EXEC
lea.l (14,sp),sp
move.l d0,d7
bmi main_exit
clr.l -(sp)
pea.l execparam
pea.l execname
move.w #1,-(sp)
DOS _EXEC
lea.l (14,sp),sp
move.l d0,d7
bmi main_exit
pea.l (joyget_routine,pc)
move.w #$0100+_JOYGET,-(sp)
DOS _INTVCS
move.l d0,(2,sp)
move.l d0,joyget_old_vector
pea.l (trap14_routine,pc)
move.w #TRAP14_VECTOR>>2,-(sp)
DOS _INTVCS
move.l d0,(2,sp)
move.l d0,trap14_old_vector
move.l d7,-(sp)
move.w #4,-(sp)
DOS _EXEC
addq.l #6,sp
move.l d0,d7
DOS _INTVCS
addq.l #6,sp
DOS _INTVCS
addq.l #6,sp
IOCS _B_CURON
IOCS _OS_CURON
bra 2f
1: IOCS _B_KEYINP
2: IOCS _B_KEYSNS
tst.l d0
bne 1b
clr.w -(sp)
DOS _KFLUSH
addq.l #2,sp
main_exit:
move.w d7,-(sp)
DOS _EXIT2
filename: .dc.b 'PLIN.X',0
.even
.bss
.even
trap14_old_vector: .ds.l 1
joyget_old_vector: .ds.l 1
.even
.ds.l 2
execparam: .ds.b 1024
execname: .ds.b 256
.even
.ds.b 1024*64
stack_top:
;----------------------------------------------------------------
;TRAP#14例外処理ルーチン
; 「書き込み不可能です」のときだけ無条件に実行を中止する
.text
trap14_routine:
cmp.w #$700E,d7
beq @f
move.l trap14_old_vector,-(sp)
rts
@@: IOCS _ABORTRST
IOCS _ABORTJOB
rte
;----------------------------------------------------------------
;IOCS _JOYGET処理ルーチン
; キーボードでの操作に対応する
; ↑/8 上
; ↓/2 下
; ←/4 左
; →/6 右
; XF1/OPT.1 ボタンA(ボンバー)
; XF2/OPT.2 ボタンB(ショット)
.text
joyget_routine:
move.l a0,-(sp)
movea.l joyget_old_vector,a0
jsr (a0)
move.w d1,-(sp)
lea.l $0807.w,a0
move.b (a0)+,d1 ;$0807.w
;........|.DRUL...
and.w #%00000000_01111000,d1 ;00000000|0DRUL000
and.b (drul_lu,pc,d1.w),d0
move.w (a0)+,d1 ;$0808.w,$0809.w
;4+987-*/|0E321=65
;L..U....|...D..R.
and.w #%10010000_00010010,d1 ;L00U0000|000D00R0
add.w #%00110000_00000110,d1 ;LU..0000|000DR..0
rol.w #2,d1 ;..000000|0DR..0LU
and.w #%00000000_01100011,d1 ;00000000|0DR000LU
and.b (drul_lu,pc,d1.w),d0
move.b $080E.w,d1 ;....BA..
lsl.b #3,d1 ;.BA..000
or.b (a0),d1 ;$080A.w
;.BA.....
and.b #%01100000,d1 ;0BA00000
not.b d1
and.b d1,d0
move.w (sp)+,d1
movea.l (sp)+,a0
rts
drul_lu:
.irp _6,%11111111,%11111101
.irp _5,%11111111,%11110111
.irp _4,%11111111,%11111110
.irp _3,%11111111,%11111011
.rept 2
.irp _1,%11111111,%11111011
.irp _0,%11111111,%11111110
.dc.b _0.and._1.and._3.and._4.and._5.and._6
.endm
.endm
.endm
.endm
.endm
.endm
.endm
;----------------------------------------------------------------
;文字列をコピーする
;<a0.l:コピー先
;<a1.l:コピーする文字列
;>a0.l:コピー先の文字列の末尾の0の位置
;>a1.l:コピーした文字列の末尾の0の次の位置
.text
strcpy::
@@: move.b (a1)+,(a0)+
bne @b
subq.l #1,a0
rts
;----------------------------------------------------------------
.end exec_entry